﻿/*******************************************************************************
    File name:         cjt188_api_07.h
    Author:         李明
    Version:          1.0
    Date:            2012年10月22日
    Description:     cjt188 2007版规约解析头文件，用于智能采集终端与集中器、集中
                    器与智能电表通信的规约处理                 
    Others:       
    Function List: 
    1. History: 
                    
          1)  Date:
          2)  Author:
          3)  Modification:  Created
    2. ...
*******************************************************************************/
#ifndef _CJT188_API_2007_H_
#define _CJT188_API_2007_H_


#pragma pack(push)  // 采用一字节对齐
#pragma pack(1)

/* 调试开关 */
#define CJT188_DEBUG_ON
#undef CJT188_DEBUG_ON   // 正式版注释掉


#ifdef CJT188_DEBUG_ON

#define OUT_BUF_LEN 1024
#define CJT188_ON  0
#define CJT188_OFF 1

extern int g_need_pack_07;
extern char g_out_data_07[OUT_BUF_LEN];

#endif



#ifndef _TYPE_DEF_LM_
#define _TYPE_DEF_LM_
#ifndef __RTL_H__
#define __RTL_H__
typedef char    BOOL;
#endif
#define TRUE    (1)
#define FALSE   (0)
typedef unsigned char UCHAR;
typedef char    CHAR;
typedef unsigned short USHORT;
typedef short   SHORT;

typedef unsigned long ULONG;
typedef long    LONG;

#ifndef _TYPE_DEF_
#define _TYPE_DEF_
typedef char            INT8;       //c
typedef short           INT16;      //s
typedef int             INT32;      //l
typedef unsigned char   UINT8;      //uc
typedef unsigned short  UINT16;     //us
typedef unsigned int    UINT32;     //ul

#ifdef MACHINE_64_BITS
typedef long             INT64;
typedef unsigned   long  UINT64;
#else
typedef long  long           INT64;
typedef unsigned long  long  UINT64;
#endif

typedef char*           STRING;     //str
typedef char            ISBOOL;     //b
typedef unsigned int    IPADDR;     //ip
typedef double          DOUBLE;
typedef void*  FRWK_HANDLE;

#endif
#endif



/* 宏定义 **/
#define NAME_LEN             128  
#define UNKNOWN_RULER_ID     0XFFFF
#define CJT188_ADDR_LEN         14                      /* 地址长 */
#define CJT188_DATA_MAX_NR      240                       /* cjt188 2007 最大数据域字节数算规约ID */
#define CJT188_DATA_MAX         (CJT188_DATA_MAX_NR + 4)   /* cjt188 2007 最大数据域字节数 */
#define CJT188_FRAME_LEN_MIN    12                        /* CJT188 2007 最小帧字节数 */  

/*功能码 2007*/
#define CJT188_CTRL_RESV                                0x00     // 保留
#define CJT188_CTRL_READ_DATA                           0x01    // 读数据
#define CJT188_CTRL_READ_ADDR                           0x03    // 读通信地址
#define CJT188_CTRL_WRITE_DATA                          0x04    // 写数据
#define CJT188_CTRL_WRITE_ADDR                          0x15    // 写通信地址


/** 宏定义 */


/* 返回值类型 列表*/
typedef enum
{
    E_CJT188_OK = 0,            /* 返回OK */
    E_CJT188_ERRO_NULL,        /* 指针为空 */
    E_CJT188_ERRO_UNKOWN_ID,    // 未知规约ID
    E_CJT188_ERRO_PARA_NONE,   /* 不存在 */
    E_CJT188_ERRO_PARA_OUT_RANGE,
    
    //check frame
    E_CJT188_ERRO_FRAME_UNCOMP,        /* 不完整的帧数据 */
    E_CJT188_ERRO_FRAME_0x68,          /* 测试帧帧起始符 0x68 的位置不对 */
    E_CJT188_ERRO_FRAME_CHECK_SUM,     /* 测试帧检验和不对 */
    E_CJT188_ERRO_FRAME_END_0x16,      /* 测试帧结束符 0x16 不对 */
    E_CJT188_ERRO_NONE_FRAME,          // 没有找到帧

}eCJT188Err;




/* cjt188 2007规约类型 **/
typedef enum
{
    E_CJT188_RULER_TYPE_UNKNOWN  =  0,                         // 未知的规约类型

    /* 标准协议 */
    E_CJT188_RULER_TYPE_A1_MIN = 0x0000,
    
    /* [00] [00] [(00~FF)] [00] */
    E_CJT188_RULER_TYPE_COMB_HAVE_TOTAL = 0x1F90,// 读计量数据
    E_CJT188_RULER_TYPE_ADDR = 0x0A81,// 表地址

}E_CJT188_RULER_TYPE;
/** cjt188 2007规约类型 */




/* CJT188 2007版 规约编码表类型 */
typedef enum
{
    E_CJT18807_RULER_TABEL_POWER,          /* 对应表A.1 电能量数据标识编码表 */
    E_CJT18807_RULER_TABEL_DEMAND,      /* 对应表A.2 最大需量及发生时间数据标识编码表 */
    E_CJT18807_RULER_TABEL_VAR,            /* 对应表A.3 变量数据标识编码表 */
    E_CJT18807_RULER_TABEL_EVENT,        /* 对应表A.4 事件记录数据标识编码表 */
    E_CJT18807_RULER_TABEL_PARA,         /* 对应表A.5 参变量数据标识编码表 */
    E_CJT18807_RULER_TABEL_FREEZE,      /* 对应表A.6 冻结数据标识编码表 */
    E_CJT18807_RULER_TABEL_LOAD,        /* 对应表A.7 负荷记录数据标识编码表 */
    E_CJT18807_RULER_TABEL_EXT,            /* 对应表A.8 用户自定义数据标识编码表 */

}E_CJT188_07_RULER_TABEL_TYPE;



/* 结算日类型 */
typedef enum
{
    E_CJT188_PAYOFF_NULL,      // 不关心该参数
    E_CJT188_PAYOFF_CURRENT, /* 当前 */
    E_CJT188_PAYOFF_PRE_1,      /* 上 1 结算日 */
    E_CJT188_PAYOFF_PRE_2,      /* 上 2 结算日 */
    E_CJT188_PAYOFF_PRE_3,      /* 上 3 结算日 */
    E_CJT188_PAYOFF_PRE_4,      /* 上 4 结算日 */
    E_CJT188_PAYOFF_PRE_5,      /* 上 5 结算日 */
    E_CJT188_PAYOFF_PRE_6,      /* 上 6 结算日 */
    E_CJT188_PAYOFF_PRE_7,      /* 上 7 结算日 */
    E_CJT188_PAYOFF_PRE_8,      /* 上 8 结算日 */
    E_CJT188_PAYOFF_PRE_9,      /* 上 9 结算日 */
    E_CJT188_PAYOFF_PRE_10,  /* 上 10 结算日 */
    E_CJT188_PAYOFF_PRE_11,  /* 上 11 结算日 */
    E_CJT188_PAYOFF_PRE_12,  /* 上 12 结算日 */
     
}E_CJT188_PARA_PAYOFF;


/* 参数 谐波次数 */
typedef enum
{

    E_CJT188_HARM_NULL,        // 不关心谐波次数
    E_CJT188_HARM_1,            // 1次谐波
    E_CJT188_HARM_2,            // 2次谐波
    E_CJT188_HARM_3,            // 3次谐波
    E_CJT188_HARM_4,            // 4次谐波
    E_CJT188_HARM_5,            // 5次谐波
    E_CJT188_HARM_6,            // 6次谐波
    E_CJT188_HARM_7,            // 7次谐波
    E_CJT188_HARM_8,            // 8次谐波
    E_CJT188_HARM_9,            // 9次谐波
    E_CJT188_HARM_10,            // 10次谐波
    E_CJT188_HARM_11,            // 11次谐波
    E_CJT188_HARM_12,            // 12次谐波
    E_CJT188_HARM_13,            // 13次谐波
    E_CJT188_HARM_14,            // 14次谐波
    E_CJT188_HARM_15,            // 15次谐波
    E_CJT188_HARM_16,            // 16次谐波
    E_CJT188_HARM_17,            // 17次谐波
    E_CJT188_HARM_18,            // 18次谐波
    E_CJT188_HARM_19,            // 19次谐波
    E_CJT188_HARM_20,            // 20次谐波
    E_CJT188_HARM_21,            // 21次谐波

}E_CJT188_PARA_HARM;

/* 参数上N次数 */
typedef enum
{
    E_CJT188_LAST_NULL,        // 上不关次数
    E_CJT188_LAST_1,            // 上1次
    E_CJT188_LAST_2,            // 上2次
    E_CJT188_LAST_3,            // 上3次
    E_CJT188_LAST_4,            // 上4次
    E_CJT188_LAST_5,            // 上5次
    E_CJT188_LAST_6,            // 上6次
    E_CJT188_LAST_7,            // 上7次
    E_CJT188_LAST_8,            // 上8次
    E_CJT188_LAST_9,            // 上9次
    E_CJT188_LAST_10,            // 上10次    
    E_CJT188_LAST_11,            // 上11次
    E_CJT188_LAST_12,            // 上12次    
}E_CJT188_PARA_LAST;

/* 规约参数费率 */
typedef enum
{
    E_CJT188_RATE_NULL,        // 不关心费率参数
    E_CJT188_RATE_1,            // 费率
    E_CJT188_RATE_2,            // 费率2
    E_CJT188_RATE_3,            // 费率3
    E_CJT188_RATE_4,            // 费率4
    E_CJT188_RATE_5,            // 费率5
    E_CJT188_RATE_6,            // 费率6
    E_CJT188_RATE_7,            // 费率7
    E_CJT188_RATE_8,            // 费率8
    E_CJT188_RATE_9,            // 费率9
    E_CJT188_RATE_10,            // 费率10
    E_CJT188_RATE_11,            // 费率11
    E_CJT188_RATE_12,            // 费率12
    E_CJT188_RATE_13,            // 费率13
    E_CJT188_RATE_14,            // 费率14
    E_CJT188_RATE_15,            // 费率15
    E_CJT188_RATE_16,            // 费率16
    E_CJT188_RATE_17,            // 费率17
    E_CJT188_RATE_18,            // 费率18
    E_CJT188_RATE_19,            // 费率19
    E_CJT188_RATE_20,            // 费率20
    E_CJT188_RATE_21,            // 费率21
    E_CJT188_RATE_22,            // 费率22
    E_CJT188_RATE_23,            // 费率23
    E_CJT188_RATE_24,            // 费率24
    E_CJT188_RATE_25,            // 费率25
    E_CJT188_RATE_26,            // 费率26
    E_CJT188_RATE_27,            // 费率27
    E_CJT188_RATE_28,            // 费率28
    E_CJT188_RATE_29,            // 费率29
    E_CJT188_RATE_30,            // 费率30
    E_CJT188_RATE_31,            // 费率31
    E_CJT188_RATE_32,            // 费率32
    E_CJT188_RATE_33,            // 费率33
    E_CJT188_RATE_34,            // 费率34
    E_CJT188_RATE_35,            // 费率35
    E_CJT188_RATE_36,            // 费率36
    E_CJT188_RATE_37,            // 费率37
    E_CJT188_RATE_38,            // 费率38
    E_CJT188_RATE_39,            // 费率39
    E_CJT188_RATE_40,            // 费率40
    E_CJT188_RATE_41,            // 费率41
    E_CJT188_RATE_42,            // 费率42
    E_CJT188_RATE_43,            // 费率43
    E_CJT188_RATE_44,            // 费率44
    E_CJT188_RATE_45,            // 费率45
    E_CJT188_RATE_46,            // 费率46
    E_CJT188_RATE_47,            // 费率47
    E_CJT188_RATE_48,            // 费率48
    E_CJT188_RATE_49,            // 费率49
    E_CJT188_RATE_50,            // 费率50
    E_CJT188_RATE_51,            // 费率51
    E_CJT188_RATE_52,            // 费率52
    E_CJT188_RATE_53,            // 费率53
    E_CJT188_RATE_54,            // 费率54
    E_CJT188_RATE_55,            // 费率55
    E_CJT188_RATE_56,            // 费率56
    E_CJT188_RATE_57,            // 费率57
    E_CJT188_RATE_58,            // 费率58
    E_CJT188_RATE_59,            // 费率59
    E_CJT188_RATE_60,            // 费率60
    E_CJT188_RATE_61,            // 费率61
    E_CJT188_RATE_62,            // 费率62
    E_CJT188_RATE_63,            // 费率63
    E_CJT188_RATE_64,            // 费率64
}E_CJT188_PARA_RATE;


/* 结构 */


/* 数据转换方向 */
typedef enum
{
    E_CJT188_TRANS_U2F,    // 数据格式从用户侧转换到帧侧
    E_CJT188_TRANS_F2U,    // 数据格式从帧侧转换到用户侧
    
}E_CJT188_TRANS_FLG;

typedef eCJT188Err (*F_CJT188_RULER_TRANS)(E_CJT188_TRANS_FLG, char*, char*);

/* 规约的格式类型 */
typedef enum
{    
    E_CJT188_FMT_UNKOWN,                // 未知 
    E_CJT188_FMT_XXXX,                    // XXXX
    E_CJT188_FMT_XX_2 = E_CJT188_FMT_XXXX,// XXXX
    E_CJT188_FMT_XXXXXX,                // XXXXXX
    E_CJT188_FMT_XX_3 = E_CJT188_FMT_XXXXXX,
    E_CJT188_FMT_XX_4,                    // XX 重复4次
    E_CJT188_FMT_XX_6,                    // XX 重复6次
    E_CJT188_FMT_XX_8,                    // XX 重复8次
    E_CJT188_FMT_XX_10,                // XX 重复10次
    E_CJT188_FMT_XX_16,                // XX 重复16次
    E_CJT188_FMT_X_XXX,                // X.XXX
    E_CJT188_FMT_XX_XX,                // XX.XX
    E_CJT188_FMT_XX_XXXX,                // XX.XXXX
    E_CJT188_FMT_XXXX_XXXX,                // XXXX.XXXX
    E_CJT188_FMT_XX_XXXX_8,            // XX.XXXX
    E_CJT188_FMT_XXX_X,                // XXX.X
    E_CJT188_FMT_XXX_XXX,                // XXX.XXX
    E_CJT188_FMT_XXXXXX_XX,            // XXXXXX.XX
    E_CJT188_FMT_XXXXXXXX,                // XXXXXXXX
    E_CJT188_FMT_XXXXXX_2,                // XXXXXX 重复2次
    E_CJT188_FMT_XXXXXX_6,                // XXXXXX 重复6次
    E_CJT188_FMT_NN,                     // NN 
    E_CJT188_FMT_NNNN,                 // NNNN 
    E_CJT188_FMT_NN_4,                 // NN 
    E_CJT188_FMT_NN_6,                 // NN 
    E_CJT188_FMT_NN_32,                 // NN 
    E_CJT188_FMT_N_NNN,                 // N.NNN 
    E_CJT188_FMT_NN_NNNN,                 // NN.NNNN 
    E_CJT188_FMT_NNN_N,                 // NNN.N 
    E_CJT188_FMT_hhmmss,                // hhmmss 
    E_CJT188_FMT_MMDDhhmm,                // MMDDhhmm
    E_CJT188_FMT_MMDDNN_14,            // MMDDNN 重复14次
    E_CJT188_FMT_hhmmNN_14,            // hhmmNN 重复14次
    E_CJT188_FMT_DDhh,                    // DDhh
    E_CJT188_FMT_YYMMDDWW,                // YYMMDDWW 
    E_CJT188_FMT_YYMMDDNN,                // YYMMDDWW 
    E_CJT188_FMT_YYMMDDhhmm,            // YYMMDDhhmm 
    E_CJT188_FMT_YYMMDDhhmmNN,            // YYMMDDhhmm
    E_CJT188_FMT_YYMMDDhhmmss,            // YYMMDDhhmmss 
    E_CJT188_FMT_YYMMDDhhmmss_2,        // YYMMDDhhmmss YYMMDDhhmmss
    E_CJT188_FMT_YYMMDDhhmmss_2_XX_XXXX_YYMMDDhhmm,        // YYMMDDhhmmss YYMMDDhhmmss xx.xxxx YYMMDDhhmm
    E_CJT188_FMT_XX_XXXX_YYMMDDhhmm,    /* XX.XXXX
                                       YYMMDDhhmm */
    E_CJT188_FMT_YYMMDDhhmmss_XXX_XXX_YYMMDDhhmmss,    /* YYMMDDhhmmss
                                                        XXX.XXXX
                                                        YYMMDDhhmmss */

    // 复杂结合数据格式类型
    E_CJT188_FMT_RECD_LOSS_LESS_VOLT,        // 失压 欠压数据格式    
    E_CJT188_FMT_RECD_ANTI_PHASE,    // 逆相序数据格式
    E_CJT188_FMT_RECD_UN_BALANCE,    // 不平衡数据格式    
    E_CJT188_FMT_RECD_LESS_MORE_LOSS_ELEC,        // LESS MORE LOSS 失流、过流、断流数据记录格式
    E_CJT188_FMT_RECD_VOLT_PASS_PERCENT,        // 电压合格率数据统计
    E_CJT188_FMT_RECD_METER_PROG,        // 电压合格率数据统计
    E_CJT188_FMT_RECD_METER_CLEAR,        // 电压合格率数据统计
    E_CJT188_FMT_RECD_DEAMD_CLEAR,        // 电压合格率数据统计
    E_CJT188_FMT_RECD_EVENT_CLEAR,        // 电压合格率数据统计
    E_CJT188_FMT_RECD_ADJUST_TIME,        // 电压合格率数据统计
    E_CJT188_FMT_RECD_PART_PROG,        // 时段表编程记录
    E_CJT188_FMT_RECD_ZONE_PROG,        // 时区表编程记录
    E_CJT188_FMT_RECD_WEEKDAY_PROG,
    E_CJT188_FMT_RECD_HOLIDAY_PROG,
    E_CJT188_FMT_RECD_POWER_PROG,
    E_CJT188_FMT_RECD_PAYOFF_PROG,
    E_CJT188_FMT_RECD_OPEN_METER_CAP,
    E_CJT188_FMT_RECD_OPEN_BTN_BOX,
}E_CJT188_RULER_FORMAT;

/* 规约读写类型 */
typedef enum
{
    E_CJT188_RDWR_READ_ONLY,        /* 只读 */
    E_CJT188_RDWR_WRITE_ONLY,        /* 只写 */
    E_CJT188_RDWR_READ_WRITE,        /* 读写 */

}E_CJT188_RULER_RDWR;


/*数据结构*/


typedef struct
{
    E_CJT188_PARA_PAYOFF   payoff;        // 结算日(不关心，当前，上(1-12)结算日)
    E_CJT188_PARA_RATE      rate;         // 费率(不关心，1~63)
    E_CJT188_PARA_HARM      harm;         // 谐波次(不关心，1~21)
    E_CJT188_PARA_LAST      last;         // 上(n)次记录(不关心，1-10)
    
}S_CJT188_RULER_PARA;
typedef struct
{
    E_CJT188_RULER_TYPE     type;            // 规约类型
    E_CJT188_RULER_RDWR    rdwr;            // 规约数据的读写属性
    E_CJT188_RULER_FORMAT     format;            // 规约数据的格式
    F_CJT188_RULER_TRANS    func;            // 数据域转换函数指针
    S_CJT188_RULER_PARA     para;            // 规约类型的额外数据
    int                 len;            // 数据域字节长度 
    char         name[NAME_LEN];        // 该条规约数据项名称

}S_CJT188_RULER_INFO;



typedef struct
{
    UINT32 ruler_id;     /* 规约标签符 C0 C1  型如 0x40E3 */
    UINT8  type;         /* 仪表类型。在主机指定地址下发指令时，或者表计回复数据时，仪表类型是10H；在主机广播发送指令时，仪表类型是AAH */
    UINT8  ctrl_code;    /* 控制码 */
    UINT8  data_len;     /* 数据域字节数 包括规约和其它数据 */
    char   address[13];  /* 地址 */
    char* data;          /* 数据 */

}S_CJT188_PACK_FRAME;

/* 控制码域 C 帧传送方向 */
typedef enum
{
    E_CJT188_CTRL_DIR_M2S, // 主站到从站
    E_CJT188_CTRL_DIR_S2M, // 从站到主站
    
}E_CJT188_CTRL_DIR;

/* 从站异常标志 */
typedef enum
{
    E_CJT188_CTRL_SR_OK, // 从站正常应答
    E_CJT188_CTRL_SR_NO, // 从站异常应答
    
}E_CJT188_CTRL_SR;

/* 有无后续帧标志 */
typedef enum
{
    E_CJT188_CTRL_FLW_NONE, //无后续
    E_CJT188_CTRL_FLW_HAVE, //有后续
    
}E_CJT188_CTRL_FLW;
/*  解析包数据域的结果标志 */
typedef enum
{
    E_CJT188_UNPD_FLG_OK,          /* 解析正确 数据可用 且数据是正常的答复 */
    E_CJT188_UNPD_FLG_ERROR_OK,    /* 解析正确 数据可用 且数据是异常的答复 */
    E_CJT188_UNPD_FLG_NONE_DATA,   /* 没有对应除规约 数据 */
    E_CJT188_UNPD_FLG_FUNC_NULL,   /* 没有解析函数 */
    E_CJT188_UNPD_FLG_FUNC_ERROR,  /* 有解析函数，但解析过程出错 */
    E_CJT188_UNPD_FLG_NONE_STRUCT, /* 没有解析该类型的用户侧数据结构 */

}E_CJT188_UNPD_FLG;

/* 控制域C 功能码 */
typedef enum
{
    E_CJT188_CTRL_RESV                  = 0x00,// 保留
    E_CJT188_CTRL_READ_DATA          = 0x01,// 读数据
    E_CJT188_CTRL_READ_ADDR          = 0x03,// 读通信地址
    E_CJT188_CTRL_WRITE_DATA          = 0x04,// 写数据
    E_CJT188_CTRL_WRITE_ADDR          = 0x15,// 写通信地址
}E_CJT188_CTRL_FNC;
/* 控制域C 结构定义 */
typedef struct
{
    E_CJT188_CTRL_DIR direct;    // 帧传送方向 
    E_CJT188_CTRL_SR  reply;      // 从站应答异常标志
    E_CJT188_CTRL_FLW follow;      // 有无后续帧
    E_CJT188_CTRL_FNC funcode;      // 功能码
    
}S_CJT188_CTRL_CODE;



typedef struct
{
    float fXX_XXXX;
    UINT8 YY;
    UINT8 MM;
    UINT8 DD;
    UINT8 hh;
    UINT8 mm;
        
}S_CJT188_XX_XXXX_YYMMDDhhmm;


typedef struct
{
    UINT32 a_times;
    UINT32 a_seconds;
    UINT32 b_times;
    UINT32 b_seconds;
    UINT32 c_times;
    UINT32 c_seconds;
}S_CJT188_XXXXXX_6;

typedef struct
{
    UINT8 MM;    // month
    UINT8 DD;    // day
    UINT8 hh;    // hour
    UINT8 mm;    // minute
}S_CJT188_MMDDhhmm;


typedef struct
{
    UINT32 ulTimes;   // XXXXXX
    UINT32 ulMinutes; // XXXXXX
}S_CJT188_XXXXXX_2;


typedef struct
{
    float fXX_XXXXX[8];
}S_CJT188_XX_XXXX_8;

typedef struct
{
    UINT8 hh;
    UINT8 mm;
    UINT8 ss;    
}S_CJT188_hhmmss;

typedef struct
{
    UINT8 hh;
    UINT8 mm;
    UINT8 NN;

}S_CJT188_hhmmNN;

typedef struct
{
    S_CJT188_hhmmNN hhmmNN[14];
}S_CJT188_hhmmNN_14;




typedef struct
{
    UINT8 YY;   // year
    UINT8 MM;    // month
    UINT8 DD;    // day
    UINT8 hh;    // hour
    UINT8 mm;    // minute
    UINT8 ss;    // second

}S_CJT188_YYMMDDhhmmss;

typedef struct
{
    S_CJT188_YYMMDDhhmmss sBegin;
    S_CJT188_YYMMDDhhmmss sEnd;
}S_CJT188_YYMMDDhhmmss_2;

typedef struct
{
    UINT8 YY;   // year
    UINT8 MM;    // month
    UINT8 DD;    // day
    UINT8 hh;    // hour
    UINT8 mm;    // minute

}S_CJT188_YYMMDDhhmm;

typedef struct
{
    S_CJT188_YYMMDDhhmmss            sBgnTime;      // 开始时刻         6 * 1
    S_CJT188_YYMMDDhhmmss            sEndTime;      // 结束时刻         6 * 1 
    S_CJT188_XX_XXXX_YYMMDDhhmm   sDemand;        // 最大需量及发生时间 
}S_CJT188_YYMMDDhhmmss_2_XX_XXXX_YYMMDDhhmm;

typedef struct
{
    S_CJT188_YYMMDDhhmmss            sBgnTime;      // 开始时刻         6 * 1
    S_CJT188_YYMMDDhhmmss            sEndTime;      // 结束时刻         6 * 1 
    float fXXX_XXX;
}S_CJT188_YYMMDDhhmmss_XX_XXXX_YYMMDDhhmmss;





typedef struct
{
    double dForthHavePowerIcr;     // 事件发生期间某相 正向有功电能增量     XXXXXX.XX
    double dBackHavePowerIcr;   // 事件发生期间某相 反向有功电能增量      XXXXXX.XX
    double dCombNone1PowerIcr;    // 事件发生期间某相 组合无功1电能增量     XXXXXX.XX
    double dCombNone2PowerIcr;    // 事件发生期间某相 组合无功2电能增量     XXXXXX.XX
    
}S_CJT188_EventRecordVoltPhase;

typedef struct
{
    float fVolt;                // 事件发生期间某相 电压 形如 XXX.X
    float fElec;                // 事件发生期间某相    电流      XXX.XXX
    float fHavePowerRate;        // 事件发生期间某相 有功功率  XX.XXXX
    float fNonePowerRate;        // 事件发生期间某相 无功功率  XX.XXXX    
    float fPowerRateFactor;        // 事件发生期间某相 功率因数  X.XXX
}S_CJT188_EventRecordFactor;


typedef struct
{
    double    dAtimeTotal;        // 事件发生期间 总安时数    XXXXXX.XX
    double    dAtimePhaseA;        // 事件发生期间 A相安时数   XXXXXX.XX
    double    dAtimePhaseB;        // 事件发生期间 B相安时数   XXXXXX.XX
    double    dAtimePhaseC;        // 事件发生期间 C相安时数   XXXXXX.XX
}S_CJT188_EventRecordAtime; // 安时数

typedef struct
{
    S_CJT188_YYMMDDhhmmss            sBgnTime;      // 开始时刻         6 * 1
    S_CJT188_YYMMDDhhmmss            sEndTime;      // 结束时刻         6 * 1
    S_CJT188_EventRecordVoltPhase sPowerTotal; // 总电能增量       4 * 8
    S_CJT188_EventRecordVoltPhase sPowerA;         // A相电能增量         4 * 8
    S_CJT188_EventRecordFactor       sFactorA;    // A相因数            5 * 4
    S_CJT188_EventRecordVoltPhase sPowerB;         // B相电能增量        4 * 8 
    S_CJT188_EventRecordFactor       sFactorB;    // B相因数             5 * 4
    S_CJT188_EventRecordVoltPhase sPowerC;     // C相电能增量         4 * 8
    S_CJT188_EventRecordFactor    sFactorC;    // C相因数            5 * 4
    S_CJT188_EventRecordAtime     sAtime;      // 安时数              4 * 8
    
}S_CJT188_LESS_LOSS_VOLT;// 失压欠压过压，断相事件发生记录数据  35 * 4 + 12 = 152字节



typedef struct
{
    S_CJT188_YYMMDDhhmmss            sBgnTime;       // 开始时刻    6 * 1    
    S_CJT188_YYMMDDhhmmss            sEndTime;       // 结束时刻    6 * 1
    S_CJT188_EventRecordVoltPhase sPowerTotal;    // 总电能增量  4 * 8
    S_CJT188_EventRecordVoltPhase sPowerA;           // A相电能增量 4 * 8
    S_CJT188_EventRecordVoltPhase sPowerB;           // B相电能增量 4 * 8
    S_CJT188_EventRecordVoltPhase sPowerC;        // C相电能增量 4 * 8
    
}S_CJT188_EventRevPhase; // 电压 电流逆相    共(140)字节

typedef struct
{
    S_CJT188_YYMMDDhhmmss            sBgnTime;              // 开始时刻
    S_CJT188_YYMMDDhhmmss            sEndTime;              // 结束时刻
    float                        fMaxUnbalanceFator;     // 最大不平衡率
    S_CJT188_EventRecordVoltPhase sPowerTotal;          // 总电能增量  4 * 8
    S_CJT188_EventRecordVoltPhase sPowerA;                   // A相电能增量 4 * 8
    S_CJT188_EventRecordVoltPhase sPowerB;                   // B相电能增量 4 * 8
    S_CJT188_EventRecordVoltPhase sPowerC;               // C相电能增量 4 * 8
    
}S_CJT188_EventUnBalance; //不平衡事件记录


typedef struct
{
    S_CJT188_YYMMDDhhmmss            sBgnTime;      // 开始时刻         6 * 1
    S_CJT188_YYMMDDhhmmss            sEndTime;      // 结束时刻         6 * 1
    S_CJT188_EventRecordVoltPhase sPowerTotal; // 总电能增量       4 * 8
    S_CJT188_EventRecordVoltPhase sPowerA;         // A相电能增量         4 * 8
    S_CJT188_EventRecordFactor       sFactorA;    // A相因数            5 * 4
    S_CJT188_EventRecordVoltPhase sPowerB;         // B相电能增量        4 * 8 
    S_CJT188_EventRecordFactor       sFactorB;    // B相因数             5 * 4
    S_CJT188_EventRecordVoltPhase sPowerC;     // C相电能增量         4 * 8
    S_CJT188_EventRecordFactor    sFactorC;    // C相因数            5 * 4
    //S_CJT188_EventRecordAtime     sAtime;      // 安时数              4 * 8
    
}S_CJT188_LESS_MORE_LOSS_ELET;// 失流，断流，过流事件发生记录数据  35 * 4 + 12 = 152字节


typedef struct
{
    UINT32 ulMonitorVoltMinutes;  // 监测时间 单位分
    float fVoltPassPercent;      // 电压合格率
    float fVoltOverLimitPercent; // 电压超限率
    UINT32 ulVoltOverUpperLimitMinutes;  // 电压超上限时间
    UINT32 ulVoltOverLowerLimitMinutes;  // 电压超下限时间
    float fVoltValueMax;                // 电压最大值
    float fVoltValueMin;                // 电压最小值
    S_CJT188_MMDDhhmm sTimeVoltValueMax;       // 最高电压发生时间      
    S_CJT188_MMDDhhmm sTimeVoltValueMin;         // 最低电压发生时间
}S_CJT188_EventPassPercent; // 合格率事件数据



typedef struct
{
    S_CJT188_YYMMDDhhmmss sProgTime;         // 事件发生时刻
    UINT8              programer[4];      // 编程者标识 4字节
    UINT32               ulRulerID[10];     // 编程的前十个数据标识码，型如 0xFFFFFFFF 不足用0xFFFFFFFF补足
}S_CJT188_EventMeterProgram; // 编程事件记录 


typedef struct
{    
    double dForthHavePower; // XXXXXX.XX 正向 有功总电能
    double dBackHavePower;  // XXXXXX.XX 反向 有功总电能
    double dNonePowerQuad1; // XXXXXX.XX 事件发生时第 1 象限无功电能
    double dNonePowerQuad2; // XXXXXX.XX 事件发生时第 2 象限无功电能
    double dNonePowerQuad3; // XXXXXX.XX 事件发生时第 3 象限无功电能
    double dNonePowerQuad4; // XXXXXX.XX 事件发生时第 4 象限无功电能
}S_CJT188_EventPower;

typedef struct
{
    S_CJT188_XX_XXXX_YYMMDDhhmm sFortHaveDemand;   // 正向有功最大需量及发生时间     XX.XXXX YYMMDDhhmm
    S_CJT188_XX_XXXX_YYMMDDhhmm sBackHaveDemand;   // 正向有功最大需量及发生时间    XX.XXXX    YYMMDDhhmm
    S_CJT188_XX_XXXX_YYMMDDhhmm sNoneDemandQuad1;  // 正向有功最大需量及发生时间    XX.XXXX    YYMMDDhhmm
    S_CJT188_XX_XXXX_YYMMDDhhmm sNoneDemandQuad2;  // 正向有功最大需量及发生时间    XX.XXXX    YYMMDDhhmm
    S_CJT188_XX_XXXX_YYMMDDhhmm sNoneDemandQuad3;  // 正向有功最大需量及发生时间    XX.XXXX    YYMMDDhhmm
    S_CJT188_XX_XXXX_YYMMDDhhmm sNoneDemandQuad4;  // 正向有功最大需量及发生时间    XX.XXXX    YYMMDDhhmm

}S_CJT188_EventDemand; //最大需量清零事件某项最大需量及发生时间

typedef struct
{
    S_CJT188_YYMMDDhhmmss sOccurTime;       // 事件发生时刻
    UINT8              operator[4];      // 操作者标识 4字节

    S_CJT188_EventDemand    sTotal;             // 电表清零前 总 需量数据
    S_CJT188_EventDemand    sPhaseA;         // 电表清零前 A相需量数据
    S_CJT188_EventDemand    sPhaseB;         // 电表清零前 B相需量数据
    S_CJT188_EventDemand    sPhaseC;         // 电表清零前 C相需量数据
}S_CJT188_EventDemandClear;

typedef struct
{
    S_CJT188_YYMMDDhhmmss sOccurTime;       // 事件发生时刻
    UINT8              operator[4];      // 操作者标识 4字节

    S_CJT188_EventPower    sTotal;             // 电表清零前 总 电能数据
    S_CJT188_EventPower    sPhaseA;         // 电表清零前 A相电能数据
    S_CJT188_EventPower    sPhaseB;         // 电表清零前 B相电能数据
    S_CJT188_EventPower    sPhaseC;         // 电表清零前 C相电能数据

}S_CJT188_EventMeterClear; // 电表清0事件记录


typedef struct
{
    S_CJT188_YYMMDDhhmmss sOccurTime;       // 事件发生时刻
    UINT8              operator[4];      // 操作者标识 4字节
    UINT32               ulEventID;         // 清零事件标记
}S_CJT188_EventClear;         // 事件清零记录


typedef struct
{
    UINT8              operator[4]; // 操作者标识 4字节
    S_CJT188_YYMMDDhhmmss sBefTime;    // 校时前时间     
    S_CJT188_YYMMDDhhmmss sAftTime;     // 校时后时间
    
}S_CJT188_EventTiming;        // 校时事件记录

typedef struct
{
    UINT8 MM;
    UINT8 DD;
    UINT8 NN;    
}S_CJT188_MMDDNN;

typedef struct
{
    S_CJT188_YYMMDDhhmmss sOccurTime;       // 事件发生时刻
    UINT8              operator[4];      // 操作者标识 4字节
    S_CJT188_MMDDNN       sZoneSet1[14];    // 时区表编程前第一套第(1~14)时区表数据
    S_CJT188_MMDDNN       sZoneSet2[14];    // 时区表编程前第二套第(1~14)时区表数据
}S_CJT188_EventZone; // 时区表编程事件记录

typedef struct
{
    S_CJT188_YYMMDDhhmmss sOccurTime;       // 事件发生时刻
    UINT8              operator[4];      // 操作者标识 4字节
    UINT8               ucTableNum;         // 周休是编程前采用的日段表号
}S_CJT188_EventWeekDay;   // 周休日编程记录


typedef struct
{
    UINT8 DD;
    UINT8 hh;
}S_CJT188_DDhh;

typedef struct
{
    UINT8 YY;
    UINT8 MM;
    UINT8 DD;
    UINT8 NN;
    
}S_CJT188_YYMMDDNN;

typedef struct
{
    UINT8 YY;
    UINT8 MM;
    UINT8 DD;
    UINT8 hh;
    UINT8 mm;
    UINT8 NN;    
}S_CJT188_YYMMDDhhmmNN;

typedef struct
{

    S_CJT188_YYMMDDhhmmss sOccurTime;       // 事件发生时刻
    UINT8              operator[4];      // 操作者标识 4字节

    S_CJT188_YYMMDDNN  sHoliday[12];        
    // 中国法定节假日11天 元旦一天。春节三天。清明一天。五一一天。端午一天。中秋一天。国庆三天。
    // 编程前第N节假日数据 标准协议支持254个节假日
    // 
    
}S_CJT188_EventHoliday; // 节假日编程事件记录


typedef struct
{
    S_CJT188_YYMMDDhhmmss sOccurTime;       // 事件发生时刻
    UINT8              operator[4];      // 操作者标识 4字节
    UINT8               ucWord;             // 功组合方式编程前的有功组合方式特征字
}S_CJT188_EventCombPower; // 有功/无功组合方式编程记录

typedef struct
{
    S_CJT188_YYMMDDhhmmss sOccurTime;       // 事件发生时刻
    UINT8              operator[4];      // 操作者标识 4字节
    S_CJT188_DDhh         sDay1;
    S_CJT188_DDhh         sDay2;
    S_CJT188_DDhh         sDay3;
}S_CJT188_EventPayoff;

typedef struct
{
    S_CJT188_YYMMDDhhmmss sBgnTime;       // 开始时刻
    S_CJT188_YYMMDDhhmmss sEndTime;       // 结束时刻 
    S_CJT188_EventPower sPowerBeforOpen;  // 开盖前电能数据
    S_CJT188_EventPower sPowerAfterOpen;  // 开盖后电能数据

}S_CJT188_EventOpenCap;        // 开表盖记录

typedef struct
{
    UINT8 YY;
    UINT8 MM;
    UINT8 DD;
    UINT8 WW;
}S_CJT188_YYMMDDWW;

typedef struct
{
    S_CJT188_MMDDNN MMDDNN[14];
    
}S_CJT188_MMDDNN_14;




typedef struct
{
    BOOL bRateErr;  // 费率数超
    BOOL bDayErr;   // 日时段数超
    BOOL bYearErr;  // 年时区数超
    BOOL bCommErr;  // 通讯速率不能更改
    BOOL bPwdErr;   // 密码错或未授权
    BOOL bNoneReq;  // 没有请求数据
    BOOL bOtherErr; // 其它错误
}S_CJT188_ERR;


/* 用户接口侧数据结构 */
typedef union
{

    float   fPower; 
    S_CJT188_YYMMDDWW sYYMMDDWW;
    S_CJT188_ERR      sError;
}U_CJT188_DATA_UNPACK;

/* 解析帧信息数据结构 */
typedef struct
{
    
    UINT8                  ctrl_c;           /* 控制码 字节型 */
    UINT8                  lead_num;         /* 前导字符 0xFE的个数 */
    UINT32                 ruler_id;         /* 规约ID */
   
    unsigned short           data_len;         /* 数据域长 */
    unsigned short         frame_len;         /* 整个帧长*/
      
    E_CJT188_RULER_TYPE       type;             /* 规约类型 */
    E_CJT188_RULER_FORMAT     format;           /* 帧中数据格式 */
    E_CJT188_UNPD_FLG         flag;             /* 解析数据到用户侧数据的标志，说明解析状态 决定data_unpack 是否可用 */
    S_CJT188_CTRL_CODE        ctrl_s;           /* 控制码结构 */
    S_CJT188_RULER_PARA       para;             /* 规约类型的额外数据 */ 
    UINT8                  data_pack[CJT188_DATA_MAX_NR];   /* 数据域 不包括规约ID的部分 没有做转换 */
    UINT8                  address[CJT188_ADDR_LEN+1];     //12位地址域数据
    U_CJT188_DATA_UNPACK      data_unpack;               /* 转换为用户侧的数据 */ 
    //UINT8   *pDataUser;
}S_CJT188_UNPACK;


/* 功能函数 */

/* 根据规约ID 获取对应规约的数据类型信息 */
int get_cjt188_ruler_info(UINT32 rulerID, S_CJT188_RULER_INFO *outRulerInfo);
int get_cjt188_ruler_id(E_CJT188_RULER_TYPE type,
                     S_CJT188_RULER_PARA para,
                     UINT32 *poutRulerID);
/* 通过地址 规约ID 数据域数据及长度 封帧 */
int pack_cjt188_frame_by_data(S_CJT188_PACK_FRAME *inPara, char *outBuffer, int *outLength); 

/* 通过地址     数据域数据及长度 封帧 */
int pack_cjt188_frame_for_ctrl_comm(S_CJT188_PACK_FRAME *inPara, char *outBuffer, INT32 *outLength);

//解析 cjt188 07帧 
int unpack_cjt188_frame(void *inpBuffer, int inBufferLength, S_CJT188_UNPACK *outpFrame);

//解析 cjt188 07响应帧 
INT32 unpack_cjt188_resp_frame(void *inpBuffer, INT32 inBufferLength, S_CJT188_UNPACK *outpFrame);

/* 从一段数据中找出第一个有效cjt188 2007帧的位置及长度 */
int get_cjt188_first_valid_frame(const UINT8 *pBuf,         // 要解析的buf
                              UINT16 usLenBuf,           // 要解析的buf字节数
                              UINT8  **ppFirstPos,       // 输出帧buffer
                              UINT16 *pusLenFrame);      // 输出Frame字节数
/* 判断一个帧是否为正确的 */
int is_right_cjt188_frame(void *inpBuffer, int inBufferLength);
/* */
void cjt188_str2bcd(const char *pstr, UINT8 *pbcd, int len);
void cjt188_bcd2str(const char* inBCD, char *outStr, int len);
double cjt188_bcd_to_double(UINT8* pBcd, int len,int LeftDigit);
int cjt188_remove_dot(int len, char*inArray, char *outArray); // 去掉字符串格式中去的小数点

int cjt188_add_dot(int len, char*inArray, char *outArray,  int dotpos); // 加上小数点

/* 解析控制码 */
eCJT188Err trans_cjt188ctrl_struct2char(UINT8 *outChar, S_CJT188_CTRL_CODE *inStruct); //将结构封装成字节
eCJT188Err trans_cjt188ctrl_char2struct(UINT8 inChar,  S_CJT188_CTRL_CODE *outStruct); //将字节封装成结构




/* 数据解析函数 */
/*XX*/
eCJT188Err trans_cjt188_data_XX_2(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_XX_3(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_XX_4(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_XX_6(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_XX_8(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_XX_10(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_XX_16(E_CJT188_TRANS_FLG flag, char *user, char *frame);

eCJT188Err trans_cjt188_data_XXXXXX_2(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_XXXXXX_6(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_XXXX(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_XXXXXX(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_XXX_X(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_XXX_XXX(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_XX_XXXX(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_XXXX_XXXX(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_XXXXXXXX(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_XXXXXX_XX(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_XX_XXXX_YYMMDDhhmm(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_XX_XXXX_8(E_CJT188_TRANS_FLG flag, char *user, char *frame);
/*NN*/
eCJT188Err trans_cjt188_data_NN(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_NNNN(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_NN_4(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_NN_6(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_NN_32(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_N_NNN(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_NN_NNNN(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_NNN_N(E_CJT188_TRANS_FLG flag, char *user, char *frame);


/*X.X*/
eCJT188Err trans_cjt188_data_X_XXX(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_XX_XX(E_CJT188_TRANS_FLG flag, char *user, char *frame);

/*YYMMDDWWhhmmss*/
eCJT188Err trans_cjt188_data_hhmmss(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_MMDDhhmm(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_DDhh(E_CJT188_TRANS_FLG flag, char *user, char *frame);

eCJT188Err trans_cjt188_data_YYMMDDWW(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_YYMMDDNN(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_YYMMDDhhmm(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_YYMMDDhhmmNN(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_YYMMDDhhmmss(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_YYMMDDhhmmss_2(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_YYMMDDhhmmss_2_XX_XXXX_YYMMDDhhmm(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_YYMMDDhhmmss_XXX_XXX_YYMMDDhhmmss(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_MMDDNN_14(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_hhmmNN_14(E_CJT188_TRANS_FLG flag, char *user, char *frame);
/* 组合数据 */
eCJT188Err trans_cjt188_data_recd_loss_less_volt(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_recd_anti_phase(E_CJT188_TRANS_FLG flag, char *user, char *frame);    // 逆相序数据格式
eCJT188Err trans_cjt188_data_recd_un_balance(E_CJT188_TRANS_FLG flag, char *user, char *frame);    // 不平衡数据格式    
eCJT188Err trans_cjt188_data_recd_less_more_loss_elec(E_CJT188_TRANS_FLG flag, char *user, char *frame);        // less more loss 失流、过流、断流数据记录格式
eCJT188Err trans_cjt188_data_recd_volt_pass_percent(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_recd_meter_prog(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_recd_meter_clear(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_recd_demand_clear(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_recd_event_clear(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_recd_adjust_time(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_recd_part_prog(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_recd_zone_prog(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_recd_weekday_prog(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_recd_holiday_prog(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_recd_power_prog(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_recd_payoff_prog(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_recd_open_meter_cap(E_CJT188_TRANS_FLG flag, char *user, char *frame);
eCJT188Err trans_cjt188_data_recd_open_btn_box(E_CJT188_TRANS_FLG flag, char *user, char *frame);

//错误状态字
eCJT188Err trans_cjt188_data_err(E_CJT188_TRANS_FLG flag, char *user, char *frame);


#pragma pack(pop) 
#endif //__CJT188_2007_RULERS_H__

